<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>ES6中class相关知识点</title>
    <!-- <link rel="stylesheet" href="style.css"> -->
</head>

<body>
    <!-- 
        1. 如何声明一个类？ ES6 使用关键字class 类名 {}
        2. 使用类的目的？主要是为了更好地产生实例化对象 通过new关键字
        3. 如何在实例化对象身上添加属性/对象
            3.1 直接复制
            属性：属性名 = 属性值;
            方法：方法名 = function() {};
            3.2 通过构造器
            每一个类中只能有一个构造器 而且这个构造器作用主要是为了给实例化对象身上的属性做初始化
            并且是在给属性做初始化的自调用 无需程序员来手动干预
            构造器也被称作为构造函数 其中的this指向是指向类的实例化对象的
        4. 再有所的实例化对象身上添加共同的方法(类的显式原型属性中)
            方法名(){}
        5. 在类对象身上添加属性/方法 偶一个关键字 static
            属性：static 属性名 = 属性值;
            方法：static 方法名 = function() {}; / static 方法名() {}
            在类对象身上添加的属性/方法 其实实例化对象是访问不到的

     -->
    <script>
        class Student {
            // 通过直接复制的方法来在类的实例化对象身上添加属性和方法
            // name = '张三';
            // study() {
            //      //函数中的this指向谁，其实取决于谁调用了这个函数
            //     // 函数中的this就是指向了类的实例化对象
            //     console.log(this)
            //     console.log('学习...')
            // }
            constructor(name) {
                this.name = name
            }
            study() {
                console.log(this.name + '学习...')
            }

            static a = 1
            static b = () => {
                console.log('b')
            }
            static c = function () {
                console.log('c')
            }
        }

        const p1 = new Student('张三')
        console.log(p1)
        p1.study()

        const p2 = new Student('李四');
        console.log(p2);

        p2.study();

        //调用类对象身上的方法/属性
        console.log(Student.a);
        Student.b();
        Student.c()

        console.log(p1.a);//undefined
    </script>
</body>

</html>